Thực đơn
Gettext Hoạt độngMã nguồn được sửa đổi đầu tiên để sử dụng các lệnh gọi GNU gettext. Với phần lớn ngôn ngữ lập trình, việc này được thực hiện bằng cách bao các chuỗi người dùng sẽ thấy trong hàm gettext
. Để tiết kiệm thời gian nhập và để giảm sự lộn xộn của mã, chức năng này thường được đặt bí danh thành _
, ví dụ cho mã C:
printf(gettext("My name is %s.\n"), my_name);
có thể thành:
printf(_("My name is %s.\n"), my_name);
Ghi chú (bắt đầu bằng ///) được đặt trực tiếp trên các chuỗi do đó đánh dấu được tạo sẵn như gợi ý cho người dịch bởi các chương trình trợ giúp.
gettext
sau đó sử dụng chuỗi được cung cấp làm khóa để tìm kiếm các bản dịch thay thế và sẽ trả về chuỗi gốc khi không có bản dịch. điều này trái ngược với POSIX catgets
[2], AmigaOS GetString
, hoặc dùng LoadString
trong Microsoft Windows nơi mà một ID chương trình (thường là một số nguyên) được dùng.
xgettext
được chạy trên các nguồn để tạo ra một file .pot
(Portable Object Template), chứa một danh sách tất cả các chuỗi có thể dịch được trích xuất từ các nguồn.
Ví dụ: file đầu vào có ghi chú có thể trông giống như sau:
/// TRANSLATORS: Please leave %s as it is, because it is needed by the program./// Thank you for contributing to this project.printf(_("My name is %s.\n"), my_name);
xgettext
được chạy bằng lệnh:
xgettext -c /
File.pot trả về trông giống như thế này với ghi chú:
#. TRANSLATORS: Please leave %s as it is, because it is needed by the program.#. Thank you for contributing to this project.#: src/name.c:36msgid "My name is %s.\n"msgstr ""
Trình dịch chuyển đổi file .po
(Portable Object) từ mẫu sử dụng chương trình msginit
, sau đó điền vào các bản dịch.[3] msginit
khởi tạo các bản dịch như vậy, ví dụ, đối với một bản dịch tiếng Pháp, lệnh để chạy sẽ là:[4]
msginit—locale=fr—input=name.pot
Điều này sẽ tạo file fr.po
. Trình dịch sau đó sửa file kết quả, hoặc bằng tay hoặc với một công cụ dịch như Poedit, hoặc Emacs với chế độ chỉnh sửa cho các file .po
. Một mụcđã chỉnh sửa sẽ giống như sau:
#: src/name.c:36msgid "My name is %s.\n"msgstr "Je m'appelle %s.\n"
Cuối cùng, file.po được biên dịch với msgfmt
thành file nhị phân .mo
(Machine Object). GNU gettext có phần mở rộng tên tệp riêng: .gmo
.[5] Bây giờ chúng đã sẵn sàng để phân phối với gói phần mềm.
Người dùng, trên các hệ thống kiểu Unix, đặt biến môi trườngLC_MESSAGES
, và chương trình sẽ hiển thị chuỗi trong ngôn ngữ đã lựa chọn, nếu có một file .mo
cho nó.
Người dùng, trên các biến thể GNU variants, đặt biến môi trường LANGUAGE
(LC_MESSAGES
cũng được hỗ trợ),[6] và chương trình sẽ hiển thị chuỗi trong ngôn ngữ đã lựa chọn, nếu có một file .mo
cho nó.
Thực đơn
Gettext Hoạt độngLiên quan
Tài liệu tham khảo
WikiPedia: Gettext http://www.icanlocalize.com/site/tutorials/how-to-... http://compgroups.net/comp.unix.solaris/History-of... https://github.com/DanielBaulig/node-gettext https://github.com/gflohr/libintl-perl https://github.com/makkarpov/scalingua https://github.com/turquoiseowl/i18n https://code.google.com/p/gettext-cs-utils/ https://secure.php.net/manual/en/book.gettext.php https://www.gnu.org/savannah-checkouts/gnu/gettext... https://www.gnu.org/software/gettext/